package d6_map_impl;

import java.util.Map;
import java.util.TreeMap;

/**
 * 2024/6/7 Cjj HashTreeMap使用 9:38
 */
public class HashTreeMap {
    public static void main(String[] args) {
      /*  Map<Student, String> map = new TreeMap<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return Double.compare(o1.getHeight(),o2.getHeight());
            }
        });*/

        Map<Student, String> map = new TreeMap<>((o1,o2)-> Double.compare(o1.getHeight(),o2.getHeight()));

        map.put(new Student("刘武",18,198.2),"动物园");
        map.put(new Student("刘武3",15,178.2),"动物园3");
        map.put(new Student("刘武4",13,158.2),"动物园4");
        map.put(new Student("刘武5",12,158.2),"动物园5");
        System.out.println(map);
    }

    /**
     * 包装类 ：Byte Short Integer Long Character Float Double Boolean
     * compareTo函数 & Comparable接口
     * 1.如果想让自定义类有比较功能,就实现Comparable接口,并overwrite其compareTo:int方法
     * 2.注意其升降序策略和compare函数相同(都return int嘛),所以在自己overwrite的时候
     *   推荐用包装类的compareTo方法,
     *   或者用o1.attribute -o2.attribute表示,
     *   (因为这样默认都是升序ascending),
     *   想要倒序descending的话就o2.attribute-o1.attribute
     *
     *   Comparator接口：
     *   1.函数式接口作为sort的参数,用于扩展sort的功能,主要用在两处: Collections接口和原生数组
     *   2.Comparator函数式接口只用到函数compare(T o1,T o2):int,来比较两个相邻元素
     *   o1<o2 指示负数 o1==o2指示0 o1>o2指示正数
     *
     *   升降序判断
     *   1.默认升序ascending
     *   2.对应默认升序的code写法是
     *   compare(first,second)
     *   first.attribute -second.attribute
     *   this.attribute - o.attribute
     *   从左到右边的顺序,从first到second的顺序(从主属性到参数的顺序)
     *   3.对应降序的code写法是：
     *    compare(second,first)
     *    second.attribute -first.attribute
     *    o.attribute - this.attribute
     *    (默认的顺序反过来)
     *
     *
     */


}
